/*
 * tp boole
 */
package boole.circuit.base;

import boole.application.vue.VueComposant;
import boole.application.vue.VueInterrupteur;
import boole.circuit.Generateur;
import boole.utils.ParcoursTopologique;

/**
 * @author Rémi PIOTAIX <remi.piotaix@gmail.com>
 * @author Thomas Nds nds.thomas@gmail.com
 * 
 */
/**Un interupteur est un générateur à une seule sortie. Il peut soit être ouvert
 * (false)ou fermé (true).
 */
public class Interrupteur extends Generateur {

    boolean valeur;
    
/** Construit un interupteur avec la valeur choisie.
 *  @ensure: this.valeur== init;
 */
    public Interrupteur(boolean init) {
        this.valeur = init;
    }
/** Construit un interupteur avec la valeur vraie par défault.
 *  @ensure: this.valeur== true;
 */
    public Interrupteur() {
        this(true);
    }

    @Override
    protected boolean[] getArrayValues() {
        return new boolean[]{this.valeur};
    }

    /**
     * changeValue inverse la valeur de l'interupteur. et propage l'information
     * de ce changement au reste du circuit.
     * @ensure: _this.valeur == !this.valeur;
     */
    public void changeValue() {
        this.valeur = !this.valeur;
        ParcoursTopologique pt = new ParcoursTopologique(this);
        pt.traitement();
    }

    @Override
    public int getNombreSorties() {
        return 1;
    }

    /**
     *
     * @param statut
     */
    @Override
    public void setStatut(String statut) {
        statut = statut.toLowerCase();
        if (statut.equals("bas")) {
            valeur = false;
        } else if (statut.equals("haut")) {
            valeur = true;
        } else {
            super.setStatut(statut);
        }
    }

    @Override
    public VueComposant getView() {
        return new VueInterrupteur(this);
    }
    
    
}
